var validacao = function(){
    //nome
    this.nome = function(nome){
        if(nome.length == 0){
            return true;
        }

        for(i = 0; i < nome.length; i++){
            if(nome.charCodeAt(i) >= 65 && nome.charCodeAt(i) <= 90 || nome.charCodeAt(i) >= 97 && nome.charCodeAt(i) <= 122 || nome.substr(i,1) == ' ' || 
                nome.substr(i,1) == 'á' || nome.substr(i,1) == 'Á' || nome.substr(i,1) == 'é' || nome.substr(i,1) == 'É' || nome.substr(i,1) == 'í' || nome.substr(i,1) == 'Í' || nome.substr(i,1) == 'ó' || nome.substr(i,1) == 'Ó' || nome.substr(i,1) == 'ú' || nome.substr(i,1) == 'Ú' || 
                nome.substr(i,1) == 'â' || nome.substr(i,1) == 'Â' || nome.substr(i,1) == 'ô' || nome.substr(i,1) == 'Ô' || 
                nome.substr(i,1) == 'ã' || nome.substr(i,1) == 'Ã' || nome.substr(i,1) == 'õ' || nome.substr(i,1) == 'Õ' || 
                nome.substr(i,1) == 'ç' || nome.substr(i,1) == 'Ç'){
                /*nothing to do*/
            }else{
                return false;
            }
        }
        return true;
    }
    
    //email
    this.email = function(email){
        if(email.length == 0){
            return true;
        }

        var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
        var check=/@[\w\-]+\./;
        var checkend=/\.[a-zA-Z]{2,3}$/;

        if(((email.search(exclude) != -1)||(email.search(check)) == -1)||(email.search(checkend) == -1)){
            return false;
        }else{
            return true;
        }
    }

    //Endereço
    this.endereco = function(ende){
        if(ende.length == 0){
            return true;
        }

        for(i = 0; i < ende.length; i++){
            if(ende.charCodeAt(i) >= 65 && ende.charCodeAt(i) <= 90 || ende.charCodeAt(i) >= 97 && ende.charCodeAt(i) <= 122 || ende.charCodeAt(i) >= 48 && ende.charCodeAt(i) <= 58 || ende.substr(i,1) == ' ' || ende.substr(i,1) == '-' || ende.substr(i,1) == '.' || ende.substr(i,1) == ',' || ende.substr(i,1) == 'º' || ende.substr(i,1) == 'ª' ||
                ende.substr(i,1) == 'á' || ende.substr(i,1) == 'Á' || ende.substr(i,1) == 'é' || ende.substr(i,1) == 'É' || ende.substr(i,1) == 'í' || ende.substr(i,1) == 'Í' || ende.substr(i,1) == 'ó' || ende.substr(i,1) == 'Ó' || ende.substr(i,1) == 'ú' || ende.substr(i,1) == 'Ú' || 
                ende.substr(i,1) == 'â' || ende.substr(i,1) == 'Â' || ende.substr(i,1) == 'ô' || ende.substr(i,1) == 'Ô' || ende.substr(i,1) == 'ã' || ende.substr(i,1) == 'Ã' || ende.substr(i,1) == 'õ' || ende.substr(i,1) == 'Õ' || ende.substr(i,1) == 'ç' || ende.substr(i,1) == 'Ç'){
                /*nothing to do*/
            }else{
                return false;
            }
        }
        return true;
    }

    // æpenas números inteiros
    this.numero = function(num){
        if(num.length == 0){
            return true;
        }

        for(i = 0; i < num.length; i++){
            if(num.charCodeAt(i) < 48 || num.charCodeAt(i) > 58){
                return false;
            }
        }

        return true;
    }
    
    // DDD
    this.ddd = function(ddd){
        if(ddd.length == 0){
            return true;
        }
        if(ddd.length < 2 || ddd.length > 3){
            return false;
        }else if(!this.numero(ddd)){
            return false;
        }else{
            return true;
        }
    }
    
    // Telefone
    this.telefone = function(tel){
        if(tel.length == 0){
            return true;
        }
        if(tel.length < 8 || tel.length > 15){
            return false;
        }else if(!this.numero(tel)){
            return false;
        }else{
            return true;
        }
    }
    
    // CPF
    this.cpf = function(cpf){
        var Soma = 0;
        var Resto;
        cpf = cpf.replace(/\.|\-/g,'');

        if(cpf.length == 0){
            return true;
        }

        if (cpf.length != 11 || cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){
            return false;
        }

        for (i=1; i<=9; i++){
            Soma = Soma + parseInt(cpf.substring(i-1, i)) * (11 - i);
        }
        Resto = (Soma * 10) % 11;

        if ((Resto == 10) || (Resto == 11)){
            Resto = 0;
        }
        if (Resto != parseInt(cpf.substring(9, 10)) ){
            return false;
        }

        Soma = 0;
        for (i = 1; i <= 10; i++){
            Soma = Soma + parseInt(cpf.substring(i-1, i)) * (12 - i);
        }
        Resto = (Soma * 10) % 11;

        if ((Resto == 10) || (Resto == 11)){
            Resto = 0;
        }
        if (Resto != parseInt(cpf.substring(10, 11) ) ){
            return false;
        }
        return true;
    }

    // CNPJ
    this.cnpj = function(cnpj) {
        cnpj = cnpj.replace(/[^\d]+/g,'');

        if(cnpj.length == 0){
            return true;
        }

        if (cnpj.length != 14){
            return false;
        }

        // Elimina CNPJs invalidos conhecidos
        if (cnpj == "00000000000000" ||
            cnpj == "11111111111111" ||
            cnpj == "22222222222222" ||
            cnpj == "33333333333333" ||
            cnpj == "44444444444444" ||
            cnpj == "55555555555555" ||
            cnpj == "66666666666666" ||
            cnpj == "77777777777777" ||
            cnpj == "88888888888888" ||
            cnpj == "99999999999999"){
            return false;
        }

        // Valida DVs
        var tamanho = cnpj.length - 2
        var numeros = cnpj.substring(0,tamanho);
        var digitos = cnpj.substring(tamanho);
        var soma = 0;
        var pos = tamanho - 7;
        for (var i = tamanho; i >= 1; i--) {
          soma += numeros.charAt(tamanho - i) * pos--;
          if (pos < 2){
              pos = 9;
          }
        }
        var resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(0)){
            return false;
        }

        tamanho = tamanho + 1;
        numeros = cnpj.substring(0,tamanho);
        soma = 0;
        pos = tamanho - 7;
        for (i = tamanho; i >= 1; i--) {
          soma += numeros.charAt(tamanho - i) * pos--;
          if (pos < 2){
              pos = 9;
          }
        }
        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(1)){
            return false;
        }
        return true;
    }
    
    // Data
    this.data = function(date) {
	if(date.length == 0){
            return true;
        }
        
	var ardt=new Array;
	var ExpReg=new RegExp("(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[12][0-9]{3}");
	ardt=date.split("/");
	erro=false;
	if ( date.search(ExpReg)==-1){
		erro = true;
		}
	else if (((ardt[1]==4)||(ardt[1]==6)||(ardt[1]==9)||(ardt[1]==11))&&(ardt[0]>30))
		erro = true;
	else if ( ardt[1]==2) {
		if ((ardt[0]>28)&&((ardt[2]%4)!=0))
			erro = true;
		if ((ardt[0]>29)&&((ardt[2]%4)==0))
			erro = true;
	}
	if (erro) {
		return false;
	}
	return true;
    }
    
    //Nomes com Números
    this.nome_num = function(nome){
        if(nome.length == 0){
            return true;
        }

        for(i = 0; i < nome.length; i++){
            if(nome.charCodeAt(i) >= 48 && nome.charCodeAt(i) <= 58 || nome.charCodeAt(i) >= 65 && nome.charCodeAt(i) <= 90 || nome.charCodeAt(i) >= 97 && nome.charCodeAt(i) <= 122 || nome.substr(i,1) == ' ' || 
                nome.substr(i,1) == 'á' || nome.substr(i,1) == 'Á' || nome.substr(i,1) == 'é' || nome.substr(i,1) == 'É' || nome.substr(i,1) == 'í' || nome.substr(i,1) == 'Í' || nome.substr(i,1) == 'ó' || nome.substr(i,1) == 'Ó' || nome.substr(i,1) == 'ú' || nome.substr(i,1) == 'Ú' || 
                nome.substr(i,1) == 'â' || nome.substr(i,1) == 'Â' || nome.substr(i,1) == 'ô' || nome.substr(i,1) == 'Ô' || 
                nome.substr(i,1) == 'ã' || nome.substr(i,1) == 'Ã' || nome.substr(i,1) == 'õ' || nome.substr(i,1) == 'Õ' || 
                nome.substr(i,1) == 'ç' || nome.substr(i,1) == 'Ç'){
                /*nothing to do*/
            }else{
                return false;
            }
        }

        return true;
    }
    
    // Números reais
    this.real = function(num){
        if(num.length == 0){
            return true;
        }

        for(i = 0; i < num.length; i++){
            if(num.charCodeAt(i) < 48 || num.charCodeAt(i) > 58){
                if(num[i] != '.' && num[i] != ','){
                    return false;
                }
            }
        }

        return true;
    }
}

var valida = new validacao;
